using UnityEngine;
using QFramework;
using System.Linq;

namespace ProjectSurvivor
{
	//partial 关键字用于定义一个部分类，允许将一个类的定义拆分到多个文件中。
	//// ViewController 是 QFramework 中的视图控制器基类
	//// IController 是 QFramework 中的控制器接口
	// 能力控制器
	public partial class AbilityController : ViewController, IController
	{
		void Start()
		{
			//用于注册监听并立即触发一次初始值
			///RegisterWithInitValue 的主要优点：
			// 立即触发初始值
			// 简化初始化代码
			// 确保UI同步
			// 提高代码可读性
			// 减少重复代码
			Global.SimpleSwordUnlocked.RegisterWithInitValue(unlocked =>
			{
				if (unlocked)
				{
					SimpleSword.Show();
				}
			}).UnRegisterWhenGameObjectDestroyed(gameObject);
			//UnRegisterWhenGameObjectDestroyed 是 QFramework 中的一个扩展方法，用于在 GameObject 销毁时自动取消注册事件。

			Global.SimpleKnifeUnlocked.RegisterWithInitValue(unlocked =>
			{
				if (unlocked)
				{
					SimpleKnife.Show();
				}

			}).UnRegisterWhenGameObjectDestroyed(gameObject);

			Global.RotateSwordUnlocked.RegisterWithInitValue(unlocked =>
			{
				if (unlocked)
				{
					RotateSword.Show();
				}

			}).UnRegisterWhenGameObjectDestroyed(gameObject);

			Global.BasketBallUnlocked.RegisterWithInitValue(unlocked =>
			{
				if (unlocked)
				{
					BasketBallAbility.Show();
				}
			}).UnRegisterWhenGameObjectDestroyed(gameObject);
			// 随机升级一个
			//获取经验升级系统        Where是C#中的LINQ(LanguageIntegratedQuery(语言集成查询))方法，用于对集合进行筛选
			this.GetSystem<ExpUpgradeSystem>().Items.Where(item => item.IsWeapon)
				.ToList()
				//随机选择并升级
				.GetRandomItem().Upgrade();
			Global.SuperBomb.RegisterWithInitValue(unlocked =>
			{
				if (unlocked)
				{
					SuperBomb.Show();
				}
			}).UnRegisterWhenGameObjectDestroyed(gameObject);
		}
		//这个接口提供了以下核心功能：
		// 注册和获取系统（System）
		// 注册和获取模型（Model）
		// 注册和获取工具（Utility）
		// 发送命令（Command）
		// 发送查询（Query）
		// 事件系统管理
		public IArchitecture GetArchitecture()
		{
			return Global.Interface;
		}
	}
}
